home *** CD-ROM | disk | FTP | other *** search
/ Apple WWDC 1996 / WWDC96_1996 (CD).toast / Technology Materials / MacOS 8 Resources / Developer Tools / Mac OS 8 Interfaces & Libraries / Interfaces / AIncludes / BlockStoragePlugin.a < prev    next >
Text File  |  1996-05-01  |  43KB  |  1,233 lines

  1. ;
  2. ;    File:        BlockStoragePlugin.a
  3. ;
  4. ;    Contains:    Block Storage Plug In Programming Interface
  5. ;
  6. ;    Version:    Technology:    Copland
  7. ;                Release:    Universal Interfaces 3.0d3 on Copland DR1
  8. ;
  9. ;    Copyright:    © 1984-1996 by Apple Computer, Inc.  All rights reserved.
  10. ;
  11. ;    Bugs?:        If you find a problem with this file, send the file and version
  12. ;                information (from above) and the problem description to:
  13. ;
  14. ;                    Internet:    apple.bugs@applelink.apple.com
  15. ;                    AppleLink:    APPLE.BUGS
  16. ;
  17. ;
  18.     IF &TYPE('__BLOCKSTORAGEPLUGIN__') = 'UNDEFINED' THEN
  19. __BLOCKSTORAGEPLUGIN__ SET 1
  20.  
  21.     IF &TYPE('__TYPES__') = 'UNDEFINED' THEN
  22.     include 'Types.a'
  23.     ENDIF
  24.     IF &TYPE('__ERRORS__') = 'UNDEFINED' THEN
  25.     include 'Errors.a'
  26.     ENDIF
  27.     IF &TYPE('__FILEMANAGERTYPES__') = 'UNDEFINED' THEN
  28.     include 'FileManagerTypes.a'
  29.     ENDIF
  30.     IF &TYPE('__NAMEREGISTRY__') = 'UNDEFINED' THEN
  31.     include 'NameRegistry.a'
  32.     ENDIF
  33.     IF &TYPE('__BLOCKSTORAGE__') = 'UNDEFINED' THEN
  34.     include 'BlockStorage.a'
  35.     ENDIF
  36.     IF &TYPE('__IOMEMORYLISTS__') = 'UNDEFINED' THEN
  37.     include 'IOMemoryLists.a'
  38.     ENDIF
  39.     IF FOR_SYSTEM8_PREEMPTIVE THEN
  40. ;
  41. ;******************************************************************************
  42. ; *******************************************************************************
  43. ; *******************************************************************************
  44. ;
  45. ;    Plug In Constants
  46. ;    
  47. ; *******************************************************************************
  48. ; *******************************************************************************
  49. ; *****************************************************************************
  50. ;
  51. ;
  52. ;******************************************************************************
  53. ;    
  54. ;    Options to a BSIOFunc
  55. ;    
  56. ; *****************************************************************************
  57. ;
  58.  
  59. kBSRead                            EQU        0
  60. kBSWrite                        EQU        1
  61. ;
  62. ;******************************************************************************
  63. ;
  64. ;    Mapping Plug-In Level of Confidence values
  65. ;    
  66. ; *****************************************************************************
  67. ;
  68.  
  69. kBSMPIDeviceNotSupported        EQU        0
  70. kBSMPIDeviceTypeRecognized        EQU        1
  71. kBSMPIDeviceMfrRecognized        EQU        2
  72. kBSMPIDeviceModelRecognized        EQU        3
  73. kBSMPIDeviceMediaRecognized        EQU        4
  74. ; typedef UInt32                         BSMPIConfidenceLevel
  75.  
  76. ;
  77. ;******************************************************************************
  78. ;
  79. ;    Mapping Plug-In Level of Confidence values
  80. ;    
  81. ; *****************************************************************************
  82. ;
  83.  
  84. kBSCPIDeviceNotSupported        EQU        0
  85. kBSCPIDeviceTypeRecognized        EQU        1
  86. kBSCPIDeviceMfrRecognized        EQU        2
  87. kBSCPIDeviceModelRecognized        EQU        3
  88. ; typedef UInt32                         BSCPIConfidenceLevel
  89.  
  90. ;
  91. ;******************************************************************************
  92. ;
  93. ;    Plug In Version - this tracks the revision of the plug-in interface and
  94. ;        should be placed in the version field of the plug-in interface structure
  95. ;    
  96. ; *****************************************************************************
  97. ;
  98.  
  99. kBSPlugInInterfaceVersion        EQU        $02011996
  100. ;
  101. ;******************************************************************************
  102. ;
  103. ;    BSIOStatus values
  104. ;    
  105. ; *****************************************************************************
  106. ;
  107.  
  108. kBSIOCompleted                    EQU        1
  109. kBSIOContinuing                    EQU        2
  110. kBSIOFailed                        EQU        3
  111. kBSIONotStarted                    EQU        4
  112. ; typedef UInt32                         BSIOStatus
  113.  
  114. ;
  115. ;******************************************************************************
  116. ; *******************************************************************************
  117. ; *******************************************************************************
  118. ;    Types
  119. ;    
  120. ; *******************************************************************************
  121. ; *******************************************************************************
  122. ; *****************************************************************************
  123. ;
  124. ; typedef void *                        BSStorePtr
  125.  
  126. ; typedef void *                        BSContainerPtr
  127.  
  128. ; typedef void *                        BSIORequestBlockPtr
  129.  
  130. ; typedef OSStatus                         BSIOErrors
  131.  
  132. ;
  133. ;******************************************************************************
  134. ;    BSErrorList:  another structure to manage I/O success/failure.
  135. ;
  136. ;    BSErrorList data structure allows a Mapping Plug-In to keep track of the
  137. ;    current state of each transfer request sent to it by the Block Storage client.  If transfers complete
  138. ;    successfully, a pointer 0 is returned.  If an error occurs, a linked list (?) of these data structures
  139. ;    is returned specifying the exact state of each transfer request.
  140. ;
  141. ;    startingBlock:        The initial transfer block of this fragment of the request
  142. ;    blockCount:            The number of blocks to be transfered including the startingBlock
  143. ;    status:                A constant representing the final state of the transfer of the blocks:
  144. ;                                 kIONotStarted:                No processing was begun on these blocks
  145. ;                                kIOStarted:                    The BS Plug-In began to process the blocks
  146. ;                                kIOToFamily:                The request was sent to the device family
  147. ;                                kIOComplete:                The request completed normally
  148. ;                                 kIOFailed:                    The request failed to complete execution
  149. ;    error:                The exact error, if any
  150. ;    xferID:                An index representing which request of a multiple-request I/O this is
  151. ;     next:                A pointer to the next data structure (could be eliminated in favor of indices)
  152. ; *****************************************************************************
  153. ;
  154. BSErrorList                RECORD 0
  155. startingBlock             ds        BSByteCount        ; offset: $0 (0)
  156. length                     ds        BSByteCount        ; offset: $8 (8)
  157. status                     ds.l    1                ; offset: $10 (16)
  158. error                     ds.l    1                ; offset: $14 (20)
  159. xferID                     ds.l    1                ; offset: $18 (24)
  160. next                     ds.l    1                ; offset: $1C (28)
  161. sizeof                     EQU *                    ; size:   $20 (32)
  162.                         ENDR
  163. ; typedef struct BSErrorList *            BSErrorListPtr
  164.  
  165. ;
  166. ;****************************************************************************
  167. ;
  168. ;    BSStoreMPIComponent describes a component of a Store.  A component may
  169. ;    be an external device or another Store.  This is the internal form of
  170. ;    BSStoreComponent.
  171. ;    
  172. ; ***************************************************************************
  173. ;
  174. BSStoreMPIComponent        RECORD 0
  175. componentType             ds.l    1                ; offset: $0 (0)
  176. startingOffset             ds        BSByteCount        ; offset: $4 (4)        ;  Where in the Store this 
  177. ;  component will be placed 
  178. sourceNode                 ds        RegEntryRef        ; offset: $C (12)        ;  Physical components 
  179. srcStore                 ds.l    1                ; offset: $1C (28)        ;  Logical components 
  180. partitionInfo             ds        BSPartitionDescriptor ; offset: $20 (32) ;  Logical components 
  181.                          ORG 358
  182. sizeof                     EQU *                    ; size:   $166 (358)
  183.                         ENDR
  184. ; typedef struct BSStoreMPIComponent *    BSStoreMPIComponentPtr
  185.  
  186. ;
  187. ;******************************************************************************
  188. ;
  189. ;    BSStoreMPIInfo - Information about the Store that the Mapping Plug-in can
  190. ;        provide
  191. ;        
  192. ; *****************************************************************************
  193. ;
  194. BSStoreMPIInfo            RECORD 0
  195. curState                 ds.l    1                ; offset: $0 (0)
  196. storeSize                 ds        BSByteCount        ; offset: $4 (4)
  197. readBlockSize             ds        BSByteCount        ; offset: $C (12)        ;  minimum read size & granularity 
  198. writeBlockSize             ds        BSByteCount        ; offset: $14 (20)        ;  minimum write size & granularity 
  199. isEjectable                 ds.b    1                ; offset: $1C (28)
  200. isWriteable                 ds.b    1                ; offset: $1D (29)
  201. hasAutoEjectHardware     ds.b    1                ; offset: $1E (30)
  202. isFormattable             ds.b    1                ; offset: $1F (31)
  203. isPartitionable             ds.b    1                ; offset: $20 (32)
  204. isFilesystem             ds.b    1                ; offset: $21 (33)
  205. reserved1                 ds.b    1                ; offset: $22 (34)
  206. reserved2                 ds.b    1                ; offset: $23 (35)
  207. curFormat                 ds        BSStoreFormatInfo ; offset: $24 (36)
  208. possibleFormats             ds.b    8 * BSStoreFormatInfo.sizeof ; offset: $34 (52)
  209. name                     ds.b    48                ; offset: $B4 (180)
  210. sizeof                     EQU *                    ; size:   $E4 (228)
  211.                         ENDR
  212. ; typedef struct BSStoreMPIInfo *        BSStoreMPIInfoPtr
  213.  
  214. ;
  215. ;******************************************************************************
  216. ;
  217. ;    BSStorePPIInfo - Information about the Store that the Partitioning Plug-in 
  218. ;        can provide
  219. ;        
  220. ; *****************************************************************************
  221. ;
  222. BSStorePPIInfo            RECORD 0
  223. numPartitions             ds.l    1                ; offset: $0 (0)
  224. maxPartitions             ds.l    1                ; offset: $4 (4)
  225. sizeof                     EQU *                    ; size:   $8 (8)
  226.                         ENDR
  227. ; typedef struct BSStorePPIInfo *        BSStorePPIInfoPtr
  228.  
  229. ;
  230. ;******************************************************************************
  231. ;
  232. ;    BSContainerPIInfo - Information about the Container that the Container
  233. ;        Plug-in can provide
  234. ;        
  235. ; *****************************************************************************
  236. ;
  237. BSContainerPIInfo        RECORD 0
  238. numChildren                 ds.l    1                ; offset: $0 (0)
  239. isEjectable                 ds.b    1                ; offset: $4 (4)
  240.                          ORG 6
  241. sizeof                     EQU *                    ; size:   $6 (6)
  242.                         ENDR
  243. ; typedef struct BSContainerPIInfo *    BSContainerPIInfoPtr
  244.  
  245. ;
  246. ;******************************************************************************
  247. ; *******************************************************************************
  248. ; *******************************************************************************
  249. ;
  250. ;    Plug-In Interface Functions
  251. ;    
  252. ; *******************************************************************************
  253. ; *******************************************************************************
  254. ; *****************************************************************************
  255. ;
  256. ;
  257. ;******************************************************************************
  258. ; *******************************************************************************
  259. ;
  260. ;    Mapping Plug-In Interface
  261. ;    
  262. ; *******************************************************************************
  263. ; *****************************************************************************
  264. ;
  265. ;
  266. ;******************************************************************************
  267. ;    BSMappingPIExamine - Plug-in's opportunity to examine a device and determine
  268. ;            if it is an appropriate plug-in for it
  269. ;    
  270. ;    Inputs:        examineStore - a pointer to the in-process Store to be examined
  271. ;    
  272. ;    Outputs:    confidence - level of confidence the plug-in has that the plugin
  273. ;                is the correct one
  274. ;    
  275. ;    Returns:    E_BSSuccess if no errors happened examining the device.  
  276. ;                If an error happened, the error received from the other family is
  277. ;                returned
  278. ; *****************************************************************************
  279. ;
  280. ;
  281. ;******************************************************************************
  282. ;
  283. ;    BSMappingPIInit - Plug-in's initialization routine.  Called when plug-in
  284. ;            is selected for a Store.  Plug-in's opportunity to initialize
  285. ;            device, allocate data structures, etc.
  286. ;    
  287. ;    Inputs:        initStore - a pointer to the Store this plug-in will be attached
  288. ;                    to
  289. ;    Outputs:    curState - the current state of the media
  290. ;    
  291. ;    Returns:    E_BSSuccess if successful
  292. ;    
  293. ; *****************************************************************************
  294. ;
  295. ;
  296. ;******************************************************************************
  297. ;
  298. ;    BSMappingPICleanup - Plug-in's dispose routine.  Called when Store is
  299. ;            being disposed of.  Should dispose of any memory or data structures
  300. ;            held for this Store, finalize all I/O for Store
  301. ;    
  302. ;    Inputs:        cleanupStore - Store that is being disposed of
  303. ;    
  304. ;    Outputs:    <none>
  305. ;    
  306. ;    Returns:    E_BSSuccess if successful
  307. ;    
  308. ; *****************************************************************************
  309. ;
  310. ;
  311. ;******************************************************************************
  312. ;    BSMappingPIIO - Plug-in's input/output routine
  313. ;    
  314. ;    Inputs:        ioStore - the Store on which IO is to be performed
  315. ;                blocks - descriptor of the blocks to do IO on
  316. ;                memory - descriptor of the memory to do IO on (memory has been prepared)
  317. ;                parentRequest - the request this request is being made on behalf of
  318. ;                options - read/write
  319. ;    
  320. ;    Outputs:    errors - where exactly the errors occured, if any
  321. ;    
  322. ;    Returns:    kBSIOContinuing if IO was started successfully and the I/O
  323. ;                    completion routine still needs to be called
  324. ;                kBSIOCompleted if IO was completed and no further action is
  325. ;                    necessary
  326. ;                kBSIOFailed if IO failed for some reason
  327. ;                kBSIONotStarted if the IO could not be started
  328. ; *****************************************************************************
  329. ;
  330. ;
  331. ;******************************************************************************
  332. ;    BSMappingPIFlush - flush plug-in's cached data (if any)
  333. ;            BSMappingPIFlush flushes the plug-in's cached data.  It is called
  334. ;            in a similar fashion to an I/O request.  BSStoreRW may be used
  335. ;            as may BSStoreFlush.
  336. ;    
  337. ;    Inputs:        flushStore - the Store on which flush is to be performed
  338. ;                parentRequest - the request this request is being made on behalf of
  339. ;    
  340. ;    Outputs:    errors - where exactly the errors occured, if any
  341. ;    
  342. ;    Returns:    kBSIOContinuing if IO was started successfully and the I/O
  343. ;                    completion routine still needs to be called
  344. ;                kBSIOCompleted if IO was completed and no further action is
  345. ;                    necessary
  346. ;                kBSIOFailed if IO failed for some reason
  347. ;                kBSIONotStarted if the IO could not be started
  348. ; *****************************************************************************
  349. ;
  350. ;
  351. ;******************************************************************************
  352. ;    BSMappingPIAddComponent - Notifies Plug-in about new components to be added
  353. ;        to it
  354. ;    
  355. ;    Inputs:        destStore - the Store the blocks are to be mapped into
  356. ;                newComponent - the new Component to be mapped in
  357. ;    
  358. ;    Outputs:    storeNewInfo - the new information about the Store
  359. ;
  360. ;    
  361. ;    Returns:    E_BSSuccess if successful
  362. ;                E_BSMPITooManyMappings if no more mappings can be handled
  363. ;                E_BSMPIOutOfStoreBounds if the start of the destination blocks 
  364. ;                    would cause a gap in the Store
  365. ;    
  366. ; *****************************************************************************
  367. ;
  368. ;
  369. ;******************************************************************************
  370. ;    BSMappingPIGoToState - Requests plug-in to take Store to the specified 
  371. ;            accessibility state.  
  372. ;    
  373. ;    Inputs:        theStore - Store to take to the state
  374. ;                gotoState - what state to go to (possible states defined above)
  375. ;                                
  376. ;    
  377. ;    Outputs:    <none>
  378. ;
  379. ;    Returns:    E_BSSuccess if successful
  380. ;    
  381. ; *****************************************************************************
  382. ;
  383. ;
  384. ;******************************************************************************
  385. ;    BSMappingPIFormatMedia - tells plug-in to do a low-level format of the media
  386. ;    
  387. ;    Inputs:        formatStore - Store to format
  388. ;    
  389. ;    Outputs:    <none>
  390. ;    
  391. ;    Returns:    E_BSSuccessful if successful
  392. ;    
  393. ; *****************************************************************************
  394. ;
  395. ;
  396. ;******************************************************************************
  397. ;    BSMappingPIGetInfo - gets information about the device and the plug-in
  398. ;    
  399. ;    Inputs:        formatStore - Store to format
  400. ;    
  401. ;    Outputs:    info - the filled in information
  402. ;    
  403. ;    Returns:    E_BSSuccessful if successful
  404. ;    
  405. ; *****************************************************************************
  406. ;
  407. ;
  408. ;******************************************************************************
  409. ;    BSMappingIOCompletion - I/O completion routine for a mapping plug-in
  410. ;    
  411. ;    Inputs:        theStore:  - A pointer to the Store in question
  412. ;                finishedPrivateData - A pointer to the private data the Mapping 
  413. ;                    plug-in associated with this I/O
  414. ;                returnedBSErrorList - A pointer to a BSErrorList if the 
  415. ;                    triggering event came from another BS plug-in
  416. ;                returnedStatus - The OSStatus returned by the other family or 
  417. ;                    plug-in that was called
  418. ;    Outputs:    errorListPtrPtr - A pointer to a pointer to a BSErrorList.  
  419. ;                    The BSErrorList is allocated and filled in by the completion 
  420. ;                    routine if the I/O has failed.  It should be allocated using 
  421. ;                    BSErrorListAllocate and will be deallocated by the family code.
  422. ;    
  423. ;    Returns:    E_BSSuccess if successful
  424. ;
  425. ; *****************************************************************************
  426. ;
  427. BlockStoragePlugInInfo    RECORD 0
  428. version                     ds.l    1                ; offset: $0 (0)
  429. reserved1                 ds.l    1                ; offset: $4 (4)
  430. reserved2                 ds.l    1                ; offset: $8 (8)
  431. reserved3                 ds.l    1                ; offset: $C (12)
  432. sizeof                     EQU *                    ; size:   $10 (16)
  433.                         ENDR
  434. BSStoreMappingOps        RECORD 0
  435. header                     ds        BlockStoragePlugInInfo ; offset: $0 (0)
  436. DeviceExamine             ds.l    1                ; offset: $10 (16)
  437. Init                     ds.l    1                ; offset: $14 (20)
  438. Cleanup                     ds.l    1                ; offset: $18 (24)
  439. IO                         ds.l    1                ; offset: $1C (28)
  440. Flush                     ds.l    1                ; offset: $20 (32)
  441. AddComponent             ds.l    1                ; offset: $24 (36)
  442. GotoState                 ds.l    1                ; offset: $28 (40)
  443. Format                     ds.l    1                ; offset: $2C (44)
  444. GetInfo                     ds.l    1                ; offset: $30 (48)
  445. ioCompletion             ds.l    1                ; offset: $34 (52)
  446. sizeof                     EQU *                    ; size:   $38 (56)
  447.                         ENDR
  448. ; typedef struct BSStoreMappingOps *    BSStoreMappingOpsPtr
  449.  
  450. ;
  451. ;******************************************************************************
  452. ;
  453. ;    BSMPIBackgroundTask - a background task entry point for a Mapping plug-in.
  454. ;            BSMPIStartBackgroundTask may be used by the Mapping plug-in to
  455. ;            start one of these.  The task will be automatically terminated
  456. ;            after the Cleanup routine is executed
  457. ;    
  458. ;    Inputs:        theStore - the Store this is running for
  459. ;                theArg - the argument passed to BSMPIStartBackgroundTask
  460. ;                
  461. ;    Outputs:    <none>
  462. ;    
  463. ;    Returns:    Errors are ignored but will be logged.
  464. ; *****************************************************************************
  465. ;
  466. ;
  467. ;******************************************************************************
  468. ; *******************************************************************************
  469. ;
  470. ;    Partitioning Plug-In Interface
  471. ;    
  472. ; *******************************************************************************
  473. ; *****************************************************************************
  474. ;
  475. ;
  476. ;******************************************************************************
  477. ;    BSPartitioningPIExamine - Plug-in's opportunity to examine a Store and
  478. ;            determine if it's the right plug-in for it
  479. ;    
  480. ;    Inputs:        readStoreConn - a connection to the Store to be examined
  481. ;    
  482. ;    Outputs:    certainty - 0 if the plug-in did not recognize the partition
  483. ;                    map format
  484. ;                otherwise the number of bytes read
  485. ;    
  486. ;    Returns:    E_BSSuccess if no errors occured
  487. ;                E_BSPPIOutOfResources if memory or other resource couldn't
  488. ;                    be allocated
  489. ;                otherwise the Block Storage error from the I/O
  490. ;    
  491. ; *****************************************************************************
  492. ;
  493. ;
  494. ;******************************************************************************
  495. ;    BSPartitioningPIInit - Plug-in's initialization routine.  Called when 
  496. ;            plug-in is selected for a Store.  Plug-in's opportunity to 
  497. ;            initialize device, allocate data structures, etc.
  498. ;    
  499. ;    Inputs:        initStore - pointer to the Store the plug-in is being attached to
  500. ;                    
  501. ;    Outputs:    <none>
  502. ;    
  503. ;    Returns:    E_BSSuccess if successful
  504. ;    
  505. ; *****************************************************************************
  506. ;
  507. ;
  508. ;******************************************************************************
  509. ;
  510. ;    BSPartitioningPICleanup - Plug-in's dispose routine.  Called when Store is
  511. ;            being disposed of.  Should dispose of any memory or data structures
  512. ;            held for this Store and flush the partition map if necessary
  513. ;    
  514. ;    Inputs:        cleanupStore - Store that is being disposed of
  515. ;    
  516. ;    Outputs:    <none>
  517. ;    
  518. ;    Returns:    E_BSSuccess if successful
  519. ;    
  520. ; *****************************************************************************
  521. ;
  522. ;
  523. ;******************************************************************************
  524. ;    BSPartitioningPIInitializeMap - lays down a new partition map on a Store (plug-in has
  525. ;            already been attached)
  526. ;    
  527. ;    Inputs:        initStore - the Store to be initialized
  528. ;    
  529. ;    Outputs:    <none>
  530. ;    
  531. ;    Returns:    E_BSSuccess if successful
  532. ;                otherwise, Block Storage error if I/O fails
  533. ;    
  534. ; *****************************************************************************
  535. ;
  536. ;
  537. ;******************************************************************************
  538. ;    BSPartitioningPIGetInfo - Gets information about the partition map and the
  539. ;        partitioning plug-in
  540. ;    
  541. ;    Inputs:        store - the Store to read from
  542. ;    
  543. ;    Outputs:    info - the filled in information
  544. ;    
  545. ;    Returns:    E_BSSuccess if successful
  546. ;    
  547. ; *****************************************************************************
  548. ;
  549. ;
  550. ;******************************************************************************
  551. ;    BSPartitioningPIGetEntry - Get a particular partition map entry
  552. ;    
  553. ;    Inputs:        readStore - the Store
  554. ;                entryNum - which entry to read
  555. ;                
  556. ;    Outputs:    retEntry - pointer to a BSPartitionDescriptor that's filled in
  557. ;                    with the entry
  558. ;    
  559. ;    Returns:    E_BSSuccess if successful
  560. ;                E_BSPPIPartitionNonExistant if that entry does not exist
  561. ;                other Block Storage error if I/O problem
  562. ;    
  563. ; *****************************************************************************
  564. ;
  565. ;
  566. ;******************************************************************************
  567. ;    BSPartitioningSetEntry - Sets the information in a particular partition map
  568. ;            entry
  569. ;    
  570. ;    Inputs:        
  571. ;    
  572. ;    Outputs:    
  573. ;    
  574. ;    Returns:    
  575. ;    
  576. ; *****************************************************************************
  577. ;
  578. BSStorePartitioningOps    RECORD 0
  579. header                     ds        BlockStoragePlugInInfo ; offset: $0 (0)
  580. Examine                     ds.l    1                ; offset: $10 (16)
  581. Init                     ds.l    1                ; offset: $14 (20)
  582. Cleanup                     ds.l    1                ; offset: $18 (24)
  583. InitializeMap             ds.l    1                ; offset: $1C (28)
  584. GetInfo                     ds.l    1                ; offset: $20 (32)
  585. GetEntry                 ds.l    1                ; offset: $24 (36)
  586. SetEntry                 ds.l    1                ; offset: $28 (40)
  587. sizeof                     EQU *                    ; size:   $2C (44)
  588.                         ENDR
  589. ; typedef struct BSStorePartitioningOps * BSStorePartitioningOpsPtr
  590.  
  591. ;
  592. ;******************************************************************************
  593. ; *******************************************************************************
  594. ;
  595. ;    Container Plug-In Interface
  596. ;    
  597. ; *******************************************************************************
  598. ; *****************************************************************************
  599. ;
  600. ;
  601. ;******************************************************************************
  602. ;
  603. ;    BSContainerPIExamine - Called to allow the Container plug-in to verify
  604. ;        that it is correct for the Container
  605. ;
  606. ;    Inputs:        initContainer - the Container in question    
  607. ;
  608. ;    Outputs:    levelOfConfidence - how confident the plug-in is that it is the
  609. ;                    correct one
  610. ;
  611. ;    Returns:    E_BSSuccess if successful
  612. ;
  613. ; *****************************************************************************
  614. ;
  615. ;
  616. ;******************************************************************************
  617. ;
  618. ;    BSContainerPIInit - Plug-in's initialization routine.  Called when 
  619. ;        plug-in is selected for a Container.  Plug-in's opportunity to 
  620. ;        initialize device, allocate data structures, etc.
  621. ;
  622. ;    Inputs:        initContainer - a pointer to the Container this plug-in will 
  623. ;                be attached to
  624. ;    Outputs:    info - information about the new Container
  625. ;                backgroundTask - if true, the BackgroundTask entry point will
  626. ;                    be invoked in its own private task.
  627. ;    
  628. ;    Returns:    E_BSSuccess if successful
  629. ;    
  630. ; *****************************************************************************
  631. ;
  632. ;
  633. ;******************************************************************************
  634. ;
  635. ;    BSContainerPICleanup - cleans up plug-in state
  636. ;
  637. ;    Inputs:        container - the Container to clean up for
  638. ;
  639. ;    Outputs:    <none>
  640. ;
  641. ;    Returns:    E_BSSuccess if successful
  642. ;
  643. ; *****************************************************************************
  644. ;
  645. ;
  646. ;******************************************************************************
  647. ;
  648. ;    BSContainerPIGoToState - Tells the Container to go the specified state
  649. ;
  650. ;    Inputs:        container - the Container to take to the state
  651. ;                accessState - the state to go to
  652. ;
  653. ;    Outputs:    <none>
  654. ;
  655. ;    Returns:    E_BSSuccess if successful
  656. ;
  657. ; *****************************************************************************
  658. ;
  659. ;
  660. ;******************************************************************************
  661. ;
  662. ;    BSContainerPIAddContainer - Informs the Container of a new sub-Container
  663. ;        being added
  664. ;
  665. ;    Inputs:        destContainer - the Container we're adding to
  666. ;                addedContainer - the Container being added
  667. ;
  668. ;    Outputs:    <none>
  669. ;
  670. ;    Returns:    E_BSSuccess if successful
  671. ;
  672. ; *****************************************************************************
  673. ;
  674. ;
  675. ;******************************************************************************
  676. ;
  677. ;    BSContainerPIGetInfo - Gets information about a Container
  678. ;
  679. ;    Inputs:        infoContainer - the Container to get information about
  680. ;
  681. ;    Outputs:    info - the filled in information buffer
  682. ;
  683. ;    Returns:    E_BSSuccess if successful
  684. ;
  685. ; *****************************************************************************
  686. ;
  687. ;
  688. ;******************************************************************************
  689. ;
  690. ;    BSContainerPIBackgroundTask - an optional entry point that will be executed
  691. ;        within its own task context if the backgroundTask flag is set on exit
  692. ;        from the Container Plug-in's init routine
  693. ;    
  694. ;    Inputs:        container - the Container the Background Task is being invoked 
  695. ;                        on behalf of
  696. ;    
  697. ;    Outputs:    <none>
  698. ;    
  699. ;    Returns:    E_BSSuccessful if successful
  700. ;    
  701. ; *****************************************************************************
  702. ;
  703. BSContainerPolicyOps    RECORD 0
  704. header                     ds        BlockStoragePlugInInfo ; offset: $0 (0)
  705. Examine                     ds.l    1                ; offset: $10 (16)
  706. Init                     ds.l    1                ; offset: $14 (20)
  707. Cleanup                     ds.l    1                ; offset: $18 (24)
  708. GoToState                 ds.l    1                ; offset: $1C (28)
  709. AddContainer             ds.l    1                ; offset: $20 (32)
  710. GetInfo                     ds.l    1                ; offset: $24 (36)
  711. BackgroundTask             ds.l    1                ; offset: $28 (40)
  712. sizeof                     EQU *                    ; size:   $2C (44)
  713.                         ENDR
  714. ; typedef struct BSContainerPolicyOps *    BSContainerPolicyOpsPtr
  715.  
  716. ;
  717. ;******************************************************************************
  718. ;
  719. ;    BSCPIBackgroundTask - a background task entry point for a Container plug-in.
  720. ;            BSCPIStartBackgroundTask may be used by the Container plug-in to
  721. ;            start one of these.  The task will be automatically terminated
  722. ;            after the Cleanup routine is executed
  723. ;    
  724. ;    Inputs:        theContainer - the Container this is running for
  725. ;                theArg - the argument passed to BSMPIStartBackgroundTask
  726. ;                
  727. ;    Outputs:    <none>
  728. ;    
  729. ;    Returns:    Errors are ignored but will be logged.
  730. ; *****************************************************************************
  731. ;
  732. ;
  733. ;******************************************************************************
  734. ; *******************************************************************************
  735. ; *******************************************************************************
  736. ;    Block Storage Family Services
  737. ;    
  738. ; *******************************************************************************
  739. ; *******************************************************************************
  740. ; *****************************************************************************
  741. ;
  742. ;
  743. ;******************************************************************************
  744. ;    BSStoreRW - Request I/O from another Store.  Used by Mapping Plug-ins.
  745. ;                Not for use by Partitioning Plug-ins!!
  746. ;    
  747. ;    Inputs:        rwStore - the Store to do I/O with
  748. ;                blocks - the blocks for the transfer
  749. ;                memory - the memory for the transfer
  750. ;                parentRequest - the BSIORequestPtr that the requestor was called
  751. ;                    with
  752. ;                privateData - pointer to be given to the completion routine
  753. ;                    when it is called
  754. ;                options - read/write
  755. ;                
  756. ;    Outputs:    errors - where errors occurred, if any occurred
  757. ;    
  758. ;    Returns:    return code from other plug-in
  759. ;    
  760. ; *****************************************************************************
  761. ;
  762. ;
  763. ; extern BSIOStatus BSStoreRW(BSStorePtr rwStore, BSBlockListDescriptorRef blocks, MemListDescriptorRef memory, BSIORequestBlockPtr parentRequest, void *privateData, OptionBits options, BSErrorListPtr *errors)
  764. ;
  765.     IF GENERATINGCFM THEN
  766.         IMPORT_CFM_FUNCTION BSStoreRW
  767.     ENDIF
  768.  
  769. ;
  770. ;******************************************************************************
  771. ;    BSStoreFlush - Request another Store to flush its caches.  Used by Mapping Plug-ins.
  772. ;                Not for use by Partitioning Plug-ins!!
  773. ;    
  774. ;    Inputs:        flushStore - the Store to flush
  775. ;                parentRequest - the BSIORequestPtr that the requestor was called
  776. ;                    with
  777. ;                privateData - pointer to be given to the completion routine
  778. ;                    when it is called
  779. ;                
  780. ;    Outputs:    errors - where errors occurred, if any occurred
  781. ;    
  782. ;    Returns:    return code from other plug-in
  783. ;    
  784. ; *****************************************************************************
  785. ;
  786. ;
  787. ; extern BSIOStatus BSStoreFlush(BSStorePtr flushStore, BSIORequestBlockPtr parentRequest, void *privateData, BSErrorListPtr *errors)
  788. ;
  789.     IF GENERATINGCFM THEN
  790.         IMPORT_CFM_FUNCTION BSStoreFlush
  791.     ENDIF
  792.  
  793. ;
  794. ;******************************************************************************
  795. ;    BSTrackOtherFamilyRequest  - informs the Block Storage family code what routine 
  796. ;        should be called when the other I/O family the request is being passed to 
  797. ;        notifies the Block Storage family of its completion.  The Mapping plug-in's
  798. ;        ioCompletion routine will be called when the notification of the request
  799. ;        completion is received.
  800. ;
  801. ;    Inputs:        ioStore - Store I/O is taking place in
  802. ;                curRequest - BSIORequestBlock for which this I/O is taking place.
  803. ;                        This was the BSIORequestBlockPtr passed into the R/W 
  804. ;                        routine.
  805. ;                privateData - Private data to be passed back when the completion routine
  806. ;                        is called.
  807. ;                retNotify - Pointer to a kernel notification structure that will
  808. ;                        be filled in by BSTrackOtherFamilyRequest to be given
  809. ;                        to the other family in the async API call
  810. ;    
  811. ;    Outputs:    <none>
  812. ;    
  813. ;    Returns:    E_BSSuccess if able to track request
  814. ;
  815. ; *****************************************************************************
  816. ;
  817. ;
  818. ; extern OSStatus BSTrackOtherFamilyRequest(BSStorePtr ioStore, BSIORequestBlockPtr curRequest, void *privateData, KernelNotificationPtr retNotify)
  819. ;
  820.     IF GENERATINGCFM THEN
  821.         IMPORT_CFM_FUNCTION BSTrackOtherFamilyRequest
  822.     ENDIF
  823.  
  824. ;
  825. ;******************************************************************************
  826. ;    BSMPIStartBackgroundTask - starts a background task for a Mapping Plug-in.
  827. ;        The task will be terminated after the Cleanup routines for the Plug-in
  828. ;        is called for this Store.
  829. ;    
  830. ;    Inputs:        store - the Store the background task is being started for
  831. ;                backgroundTask - the function to start
  832. ;                arg - the argument to be passed to the function
  833. ;    
  834. ;    Outputs:    taskID - the task ID of the new task
  835. ;    
  836. ;    Returns:    E_BSSuccess if successful
  837. ;
  838. ; *****************************************************************************
  839. ;
  840. ;
  841. ; extern OSStatus BSMPIStartBackgroundTask(BSStorePtr store, BSMPIBackgroundTask backgroundTask, void *arg, TaskID *taskID)
  842. ;
  843.     IF GENERATINGCFM THEN
  844.         IMPORT_CFM_FUNCTION BSMPIStartBackgroundTask
  845.     ENDIF
  846.  
  847. ;
  848. ;******************************************************************************
  849. ;    BSCPIStartBackgroundTask - starts a background task for a Container Plug-in.
  850. ;        The task will be terminated after the Cleanup routines for the Plug-in
  851. ;        is called for this Container.
  852. ;    
  853. ;    Inputs:        container - the Container the background task is being started for
  854. ;                backgroundTask - the function to start
  855. ;                arg - the argument to be passed to the function
  856. ;    
  857. ;    Outputs:    taskID - the task ID of the new task
  858. ;    
  859. ;    Returns:    E_BSSuccess if successful
  860. ;
  861. ; *****************************************************************************
  862. ;
  863. ;
  864. ; extern OSStatus BSCPIStartBackgroundTask(BSContainerPtr container, BSCPIBackgroundTask backgroundTask, void *arg, TaskID *taskID)
  865. ;
  866.     IF GENERATINGCFM THEN
  867.         IMPORT_CFM_FUNCTION BSCPIStartBackgroundTask
  868.     ENDIF
  869.  
  870. ;
  871. ;******************************************************************************
  872. ; *******************************************************************************
  873. ;
  874. ;    Store Accessor functions
  875. ;    
  876. ; *******************************************************************************
  877. ; *****************************************************************************
  878. ;
  879. ;
  880. ;******************************************************************************
  881. ;    BSGetMappingPIPrivateData - retrieves the Mapping Plug-in's private data
  882. ;        from a Store
  883. ;    
  884. ;    Inputs:        accessStore - the Store to retrieve the data from
  885. ;    
  886. ;    Outputs:    <none>
  887. ;    
  888. ;    Returns:    pointer to data
  889. ;
  890. ; *****************************************************************************
  891. ;
  892. ;
  893. ; extern void *BSGetMappingPIPrivateData(BSStorePtr accessStore)
  894. ;
  895.     IF GENERATINGCFM THEN
  896.         IMPORT_CFM_FUNCTION BSGetMappingPIPrivateData
  897.     ENDIF
  898.  
  899. ;
  900. ;******************************************************************************
  901. ;    BSSetMappingPIPrivateData - sets the Mapping Plug-in's private data
  902. ;        for a Store
  903. ;    
  904. ;    Inputs:        accessStore - the Store to set the data in
  905. ;                privateData - pointer to the data
  906. ;    
  907. ;    Outputs:    <none>
  908. ;    
  909. ;    Returns:    <none>
  910. ;
  911. ; *****************************************************************************
  912. ;
  913. ;
  914. ; extern void BSSetMappingPIPrivateData(BSStorePtr accessStore, void *privateData)
  915. ;
  916.     IF GENERATINGCFM THEN
  917.         IMPORT_CFM_FUNCTION BSSetMappingPIPrivateData
  918.     ENDIF
  919.  
  920. ;
  921. ;******************************************************************************
  922. ;    BSGetPartitioningPIPrivateData - retrieves the Partitioning Plug-in's private 
  923. ;        data from a Store
  924. ;    
  925. ;    Inputs:        accessStore - the Store to retrieve the data from
  926. ;    
  927. ;    Outputs:    <none>
  928. ;    
  929. ;    Returns:    pointer to data
  930. ;
  931. ; *****************************************************************************
  932. ;
  933. ;
  934. ; extern void *BSGetPartitioningPIPrivateData(BSStorePtr accessStore)
  935. ;
  936.     IF GENERATINGCFM THEN
  937.         IMPORT_CFM_FUNCTION BSGetPartitioningPIPrivateData
  938.     ENDIF
  939.  
  940. ;
  941. ;******************************************************************************
  942. ;    BSSetPartitioningPIPrivateData - sets the Partitioning Plug-in's private data
  943. ;        for a Store
  944. ;    
  945. ;    Inputs:        accessStore - the Store to set the data in
  946. ;                privateData - pointer to the data
  947. ;    
  948. ;    Outputs:    <none>
  949. ;    
  950. ;    Returns:    <none>
  951. ;
  952. ; *****************************************************************************
  953. ;
  954. ;
  955. ; extern void BSSetPartitioningPIPrivateData(BSStorePtr accessStore, void *privateData)
  956. ;
  957.     IF GENERATINGCFM THEN
  958.         IMPORT_CFM_FUNCTION BSSetPartitioningPIPrivateData
  959.     ENDIF
  960.  
  961. ;
  962. ;******************************************************************************
  963. ;    BSStoreGetNumComponents - Gets the number of component Stores or Devices 
  964. ;        that have been put together into this Store
  965. ;    
  966. ;    Inputs:        accessStore - the Store to get the number of components from
  967. ;    
  968. ;    Outputs:    <none>
  969. ;    
  970. ;    Returns:    number of components
  971. ;
  972. ; *****************************************************************************
  973. ;
  974. ;
  975. ; extern ItemCount BSStoreGetNumComponents(BSStorePtr accessStore)
  976. ;
  977.     IF GENERATINGCFM THEN
  978.         IMPORT_CFM_FUNCTION BSStoreGetNumComponents
  979.     ENDIF
  980.  
  981. ;
  982. ;******************************************************************************
  983. ;    BSStoreGetComponents - Gets the information about a particular component
  984. ;        of a Store
  985. ;    
  986. ;    Inputs:        accessStore - the Store to get the number of components from
  987. ;                componentNum - which component to return
  988. ;    
  989. ;    Outputs:    component - the BSStoreComponent buffer that is filled in
  990. ;    
  991. ;    Returns:    E_BSSuccess if no problems
  992. ;
  993. ; *****************************************************************************
  994. ;
  995. ;
  996. ; extern OSStatus BSStoreGetComponent(BSStorePtr accessStore, ItemCount componentNum, BSStoreMPIComponentPtr component)
  997. ;
  998.     IF GENERATINGCFM THEN
  999.         IMPORT_CFM_FUNCTION BSStoreGetComponent
  1000.     ENDIF
  1001.  
  1002. ;
  1003. ;******************************************************************************
  1004. ;    BSStoreSetNumPartitions - sets the number of partitions in the Store
  1005. ;    
  1006. ;    Inputs:        accessStore - the Store to get the number of components from
  1007. ;                numPartitions - the new partition count
  1008. ;    
  1009. ;    Outputs:    <none>
  1010. ;    
  1011. ;    Returns:    <none>
  1012. ;
  1013. ; *****************************************************************************
  1014. ;
  1015. ;
  1016. ; extern void BSStoreSetNumPartitions(BSStorePtr accessStore, ItemCount numPartitions)
  1017. ;
  1018.     IF GENERATINGCFM THEN
  1019.         IMPORT_CFM_FUNCTION BSStoreSetNumPartitions
  1020.     ENDIF
  1021.  
  1022. ;
  1023. ;******************************************************************************
  1024. ;    BSStoreGetPPIConnection - Gets the Store connection for the partitioning 
  1025. ;        plug-ins
  1026. ;    
  1027. ;    Inputs:        accessStore - the Store to get connection from
  1028. ;    
  1029. ;    Outputs:    <none>
  1030. ;    
  1031. ;    Returns:    Connection to the Store (kInvalidID if none)
  1032. ;
  1033. ; *****************************************************************************
  1034. ;
  1035. ;
  1036. ; extern BSStoreConnID BSStoreGetPPIConnection(BSStorePtr accessStore)
  1037. ;
  1038.     IF GENERATINGCFM THEN
  1039.         IMPORT_CFM_FUNCTION BSStoreGetPPIConnection
  1040.     ENDIF
  1041.  
  1042. ;
  1043. ;******************************************************************************
  1044. ;    BSStoreGetAccessibilityState - Gets the current accessibility state of the Store
  1045. ;    
  1046. ;    Inputs:        accessStore - the Store to get connection from
  1047. ;    
  1048. ;    Outputs:    <none>
  1049. ;    
  1050. ;    Returns:    Store's state
  1051. ;
  1052. ; *****************************************************************************
  1053. ;
  1054. ;
  1055. ; extern BSAccessibilityState BSStoreGetAccessibilityState(BSStorePtr accessStore)
  1056. ;
  1057.     IF GENERATINGCFM THEN
  1058.         IMPORT_CFM_FUNCTION BSStoreGetAccessibilityState
  1059.     ENDIF
  1060.  
  1061. ;
  1062. ;******************************************************************************
  1063. ;    BSStoreSetAccessibilityState - Sets the current accessibility state of the Store
  1064. ;    
  1065. ;    Inputs:        accessStore - the Store to get connection from
  1066. ;                setState - the state to set the Store to
  1067. ;    
  1068. ;    Outputs:    <none>
  1069. ;    
  1070. ;    Returns:    <none>
  1071. ;
  1072. ; *****************************************************************************
  1073. ;
  1074. ;
  1075. ; extern void BSStoreSetAccessibilityState(BSStorePtr accessStore, BSAccessibilityState setState)
  1076. ;
  1077.     IF GENERATINGCFM THEN
  1078.         IMPORT_CFM_FUNCTION BSStoreSetAccessibilityState
  1079.     ENDIF
  1080.  
  1081. ;
  1082. ;******************************************************************************
  1083. ;    BSStoreGetMPIInfo - Calls the GetInfo routine of the Mapping plug-in 
  1084. ;        attached to the Store
  1085. ;    
  1086. ;    Inputs:        accessStore - the Store to get connection from
  1087. ;                info - a pointer to the buffer to put the returned info into
  1088. ;    
  1089. ;    Outputs:    <none>
  1090. ;    
  1091. ;    Returns:    <none>
  1092. ;
  1093. ; *****************************************************************************
  1094. ;
  1095. ;
  1096. ; extern OSStatus BSStoreGetMPIInfo(BSStorePtr accessStore, BSStoreMPIInfo *info)
  1097. ;
  1098.     IF GENERATINGCFM THEN
  1099.         IMPORT_CFM_FUNCTION BSStoreGetMPIInfo
  1100.     ENDIF
  1101.  
  1102. ;
  1103. ;******************************************************************************
  1104. ;    BSStoreGetPPIInfo - Calls the GetInfo routine of the Partitioning plug-in 
  1105. ;        attached to the Store
  1106. ;    
  1107. ;    Inputs:        accessStore - the Store to get connection from
  1108. ;                info - a pointer to the buffer to put the returned info into
  1109. ;    
  1110. ;    Outputs:    <none>
  1111. ;    
  1112. ;    Returns:    <none>
  1113. ;
  1114. ; *****************************************************************************
  1115. ;
  1116. ;
  1117. ; extern OSStatus BSStoreGetPPIInfo(BSStorePtr accessStore, BSStorePPIInfo *info)
  1118. ;
  1119.     IF GENERATINGCFM THEN
  1120.         IMPORT_CFM_FUNCTION BSStoreGetPPIInfo
  1121.     ENDIF
  1122.  
  1123. ;
  1124. ;******************************************************************************
  1125. ;
  1126. ;    BSMPINotifyFamilyStoreChangedState - called from a Mapping Plug-in (typically
  1127. ;        in the BackgroundTask) to inform the Block Storage Family of an 
  1128. ;        unexpected accessibility change, e.g. the media was removed or the disk
  1129. ;        spun down.
  1130. ;
  1131. ;    Inputs:        changedStore - the Store that changed
  1132. ;                newState - the state the Store is now in
  1133. ;                
  1134. ;    Outputs:    <none>
  1135. ;
  1136. ;    Returns:    E_BSSuccess if successful
  1137. ;
  1138. ; *****************************************************************************
  1139. ;
  1140. ;
  1141. ; extern OSStatus BSMPINotifyFamilyStoreChangedState(BSStorePtr changedStore, BSAccessibilityState newState)
  1142. ;
  1143.     IF GENERATINGCFM THEN
  1144.         IMPORT_CFM_FUNCTION BSMPINotifyFamilyStoreChangedState
  1145.     ENDIF
  1146.  
  1147. ;
  1148. ;******************************************************************************
  1149. ;
  1150. ;    BSMPIRequestStoreStateChange - requests a state change of the Store.  This
  1151. ;        should be used, for example, if a device has an eject button that can
  1152. ;        be monitored by the Mapping Plug-in.  If the eject button is pressed
  1153. ;        BSMPIRequestStoreStateChange should be used to notify the Family that
  1154. ;        an eject has been requested and the Family can then notify clients and
  1155. ;        flush data to the media properly.  This call waits until permission is
  1156. ;        granted or denied by the Expert.  The GoToState call of the plug-in
  1157. ;        will be invoked before this calls returns if permission is granted.
  1158. ;
  1159. ;    Inputs:        changeStore - the Store the state change will affect
  1160. ;                requestedState - the state the Store is being requested to go to
  1161. ;
  1162. ;    Outputs:    permission - true if permission was granted and the Store 
  1163. ;                    successfully went to the State requested.
  1164. ;
  1165. ;    Returns:    E_BSSuccess if successful
  1166. ;
  1167. ; *****************************************************************************
  1168. ;
  1169. ;
  1170. ; extern OSStatus BSMPIRequestStoreStateChange(BSStorePtr changeStore, BSAccessibilityState requestedState, Boolean *permission)
  1171. ;
  1172.     IF GENERATINGCFM THEN
  1173.         IMPORT_CFM_FUNCTION BSMPIRequestStoreStateChange
  1174.     ENDIF
  1175.  
  1176. ;
  1177. ;******************************************************************************
  1178. ;
  1179. ;    BSCPINotifyFamilyContainerChangedState - called from a Container Plug-in 
  1180. ;        (typically in the BackgroundTask) to inform the Block Storage Family of 
  1181. ;        an unexpected accessibility change, e.g. the media was removed.
  1182. ;
  1183. ;    Inputs:        changedStore - the Store that changed
  1184. ;                newState - the state the Store is now in
  1185. ;                
  1186. ;    Outputs:    <none>
  1187. ;
  1188. ;    Returns:    E_BSSuccess if successful
  1189. ;
  1190. ; *****************************************************************************
  1191. ;
  1192. ;
  1193. ; extern OSStatus BSCPINotifyFamilyContainerChangedState(BSContainerPtr changedContainer, BSAccessibilityState newState)
  1194. ;
  1195.     IF GENERATINGCFM THEN
  1196.         IMPORT_CFM_FUNCTION BSCPINotifyFamilyContainerChangedState
  1197.     ENDIF
  1198.  
  1199. ;
  1200. ;******************************************************************************
  1201. ;
  1202. ;    BSCPIRequestContainerStateChange - requests a state change of the Container. 
  1203. ;        This should be used, for example, if a device has an eject button that 
  1204. ;        can be monitored by the Container Plug-in.  If the eject button is pressed
  1205. ;        BSCPIRequestStoreStateChange should be used to notify the Family that
  1206. ;        an eject has been requested and the Family can then notify clients and
  1207. ;        flush data to the media properly.  This call waits until permission is
  1208. ;        granted or denied by the Expert.  The GoToState call of the plug-in
  1209. ;        will be invoked before this calls returns if permission is granted.
  1210. ;
  1211. ;    Inputs:        changeContainer - the Container the state change will affect
  1212. ;                requestedState - the state the Container is being requested to go to
  1213. ;
  1214. ;    Outputs:    permission - true if permission was granted and the Container 
  1215. ;                    successfully went to the State requested.
  1216. ;
  1217. ;    Returns:    E_BSSuccess if successful
  1218. ;
  1219. ; *****************************************************************************
  1220. ;
  1221. ;
  1222. ; extern OSStatus BSCPIRequestContainerStateChange(BSStorePtr changeContainer, BSAccessibilityState requestedState, Boolean *permission)
  1223. ;
  1224.     IF GENERATINGCFM THEN
  1225.         IMPORT_CFM_FUNCTION BSCPIRequestContainerStateChange
  1226.     ENDIF
  1227.  
  1228.     ENDIF
  1229.     ENDIF ; __BLOCKSTORAGEPLUGIN__ 
  1230.  
  1231.